The present invention relates to computer software, and in particular, to constraint based software systems and methods.
Software plays an increasingly central and crucial role in a variety of applications. For example, software is often used to control and manage the behavior of a variety of types of systems. One particular type of system that may benefit from software control and management is a logistics system, such as a supply chain management system, for example. Systems are typically comprised of many components or subsystems. These components or subsystems may further be made up of subcomponents, which themselves may include components. Each component of a system may contribute some functionality to help the system achieve its overall goals. In order to contribute to the goals of the system, each component may be required to meet certain goals of its own. Accordingly, the goals of the system may be achieved by each component in the system working to achieve its own operational or functional goals.
For large systems, defining the goals of the system may be partially or completely disconnected from defining the goals of the system's components. For example, in a supply chain management system, defining system goals, such as maximum delivery time or maximum average inventory, may required an entirely different skill set than defining the goals of a component, such as the detailed requirements of one or more airplanes used to deliver goods. During development of the system software, different people may be needed to properly specify the different goals to be achieved. For instance, the above example illustrates the importance of having specialists (e.g., inventory control specialists or airline specialist) participate in defining the requirements of some components. Such specialists are often used to specify one or more “domains” in the system software, and they are referred to as “domain experts.” An example of a domain expert would be an airline specialist who may participate in defining the goals of a component of system software dealing with airline logistics (terminal availability, airplane fueling and maintenance, air travel times, etc. . . . ).
FIG. 1 illustrates a typical software development process for a subsystem of a software system for a particular domain. First, at 101, a domain expert may prepare a description of the requirements for a particular domain (e.g., one or more logically related components of the system). However, domain experts are typically do not have expertise in computer programming and architecture. Thus, while domain experts may be required to define the goals of particular subsystems, computer architects and programmers are typically used to implement the system and develop the code for the software. At 102, the domain experts meet with computer software architects and programmers to provide them with the requirements of a particular domain of the software. At 103, the software is designed and hand-coded by the architects and programmers. At 104, executable software code for the various system components is created. At 105, domain experts may again be consulted to help test the code for the particular domain application.
The above example illustrates one shortcoming with existing software systems. Because of the design methodology used, potential disconnects between domain experts and software experts are inherent in the development process, which may lead to faulty behavior of one or more system components or the system as a whole. Software experts, for example, may implement domain level functions, or integrate such functions into the larger system, erroneously because they lack the expertise to identify problems not expressly defined by the experts. There is also a potential for erroneous translations between the domain expert's goals and the software expert's implementation of such goals.
Another related problem with large software systems is that such systems may have to integrate large amounts of data from a variety of different sources. Given the ever increasing supply of raw data available in computer systems, managing such data can quickly overwhelm a system. More particularly, as data is collected and processed by a system, modifications to system components or the system as a whole may be necessary to adjust to changing real world conditions. Repeating the time consuming task of redeveloping one or more system components with domain experts and computer specialists may be difficult or even unworkable. This is especially true in real world applications where changing conditions require rapid responses and solutions.
Thus, there is a need for improving the creation and operation of system software. The present invention solves these and other problems by providing constraint based software systems and methods.